package com.lqz.tools;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
/**
 * 此工具为单例
 * @author Administrator
 *
 */
public class DateUtil {
	private static  Calendar ca = Calendar.getInstance();
	/**
	 * 设置时间
	 * @param date
	 */
	public static void setTime(Date date){
		ca.setTime(date);
	}
	/**
	 * 返回最大的日期
	 * @param date1
	 * @param date2
	 * @return
	 */
	public static Date getMaxDate(Date date1,Date date2){
		boolean flag = date1.before(date2);
		if(flag)
			return date2;
		else
			return date1;
	}
	/**
	 * 返回两个时间的最小日期
	 * @param date1
	 * @param date2
	 * @return
	 */
	public static Date getMinDate(Date date1,Date date2){
		boolean flag = date1.before(date2);
		if(!flag)
			return date2;
		else
			return date1;
	}
	/**
	 * 传入任意个时间参数，返回最大时间和最小时间组成的时间数组
	 * @param dateArray
	 * @return
	 */
	public static Date[] getMaxAndMinDate(Date... dateArray ){
		Date maxDate = dateArray[0];
		Date minDate = dateArray[0];
		 for (Date date : dateArray){
			 if(date.after(maxDate)){
				 maxDate = date;
			 }
			 if(date.before(minDate)){
				 minDate = date;
			 }
		 }
		 Date[] dateA = {maxDate,minDate};
		 return dateA;
	}
	/**
	 * 日期数组中最大日期和最小日期的分钟差
	 * @param dateArray
	 * @return
	 */
	public static long  DateDiffMinute(Date... dateArray){
		Date[] date = getMaxAndMinDate(dateArray);
		long dateDiffMinute = date[0].getTime() - date[1].getTime();
		return dateDiffMinute / 3600; 
	}
	/**
	 * 日期数组中最大日期和最小日期的小时差
	 * @param dateArray
	 * @return
	 */
	public static long  DateDiffHour(Date... dateArray){
		long dateDiffMinute = DateDiffMinute(dateArray);
		return dateDiffMinute / 60; 
	}
	/**
	 * 日期数组中最大日期和最小日期的天数差
	 * @param dateArray
	 * @return
	 */
	public static long  DateDiffDay(Date... dateArray){
		long dateDiffMinute = DateDiffMinute(dateArray);
		return dateDiffMinute / 1440; 
	}
	/**
	 * 返回格式化的日期
	 * @param date
	 * @param format
	 * @return formatDate
	 */
	public static String format(String format) {
		SimpleDateFormat sdf = new SimpleDateFormat(format);
		return sdf.format(ca.getTime());
	}

	/**
	 * 返回设置日期当前的年份
	 * 默认返回系统当前日期的年份
	 * @return
	 */
	public static int getCurrentYear() {
		return ca.get(Calendar.YEAR);
	}

	/**
	 * 返回设置日期当前月份
	 * 默认返回系统当前日期的年份
	 * @return
	 */
	public static int getCurrentMonth() {
		return ca.get(Calendar.MONTH);
	}

	/**
	 * 返回设置日期在当月的第几天
	 * 默认返回系统当前日期所在月的第几天
	 * @return
	 */
	public static int getCurrentDay() {
		return ca.get(Calendar.DATE);// 获取日
	}
	/**
	 * 返回设置日期所在的分钟
	 * 默认返回系统当前日期所在分钟
	 * @return
	 */
	public static int getCurrentMinute(){
		return ca.get(Calendar.MINUTE);// 分
	}
	/**
	 * 返回设置日期在当天的小时
	 * 默认返回系统当前日期所在当天的小时
	 * @return
	 */
	public static int getCurrentHour(){
		return ca.get(Calendar.HOUR_OF_DAY);
	}
	/**
	 * 返回设置日期所在的秒数
	 * 默认返回系统当前日期所在的秒数
	 * @return
	 */
	public static int getCurrentSecond(){
		return ca.get(Calendar.SECOND);
	}
	/**
	 * 返回设置日期在当周的第几天
	 * 默认返回系统当前日期在当周的第几天
	 * 注意:以周日开始算的
	 * @return
	 */
	public int getDayOfWeek(){
		return ca.get(Calendar.DAY_OF_WEEK);
	}
	/**
	 * 返回设置日期在当年的第几周
	 * 默认返回系统当前日期所在年的第几周
	 * @return
	 */
	public int getWeekOfYear(){
		return ca.get(Calendar.WEEK_OF_YEAR);
	}
	/**
	 * 返回设置日期在当年的第几天
	 * 默认返回系统当前日期所在年的第几天
	 * @return
	 */
	public int getDayOfYear(){
		return ca.get(Calendar.DAY_OF_YEAR);
	}
	/**
	 * 返回汉字形式的日期
	 * @return 2016年11月5日   9时47分6秒
	 */
	public static String getZNDate(){
		return getCurrentYear()+"年"+getCurrentMonth()+"月"+getCurrentDay()+"日   "
				+getCurrentHour()+"时"+getCurrentMinute()+"分"+getCurrentSecond()+"秒";
	}
	/**
	 * 返回国际时间
	 * @return Mon Dec 05 21:52:59 GMT+08:00 2016
	 */
	public static Date getIntlDate(){
		return ca.getTime();
	}
	/**
	 * 返回年月日和星期
	 * @return 2016年12月5日 星期一
	 */
	public static String getYMDAndWeek(){
		return DateFormat.getDateInstance(DateFormat.FULL, Locale.getDefault()).format(ca.getTime());
	}
	public static Date getTime(String time){
		 //创建不同的日期格式
        DateFormat df1 = DateFormat.getInstance();
        SimpleDateFormat df2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        DateFormat df3 = DateFormat.getDateInstance(DateFormat.FULL, Locale.CHINA);     //产生一个指定国家指定长度的日期格式，长度不同，显示的日期完整性也不同
        DateFormat df4 = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒", Locale.CHINA);
        SimpleDateFormat df5 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.US);
        SimpleDateFormat df6 = new SimpleDateFormat("yyyy-MM-dd");
        SimpleDateFormat df7 = new SimpleDateFormat("yyyy年MM月dd日"); 
        SimpleDateFormat df8 = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); 
        SimpleDateFormat df9 = new SimpleDateFormat("yyyy/MM/dd"); 
        Date date = null;
        try {
			date = df1.parse(time);
		} catch (ParseException e1) {
			try {
				date = df2.parse(time);
			} catch (ParseException e) {
				try {
					date = df3.parse(time);
				} catch (ParseException e2) {
					try {
						date = df4.parse(time);
					} catch (ParseException e3) {
						try {
							date = df5.parse(time);
						} catch (ParseException e4) {
							try {
								date = df6.parse(time);
							} catch (ParseException e5) {
								try {
									date = df7.parse(time);
								} catch (ParseException e6) {
									try {
										date = df8.parse(time);
									} catch (ParseException e7) {
										try {
											date = df9.parse(time);
										} catch (ParseException e8) {
											//e8.printStackTrace();
											System.out.println("时间格式有误");
										}
										
									}
								}
							} 
						}
					}
				}
			}
		}
        return date;
	}
	public static void main(String[] args) throws ParseException {
		Date a= DateUtil.getTime("2011/9/8 05:08:08");
		System.out.println(a);
		DateUtil.setTime(a);
		String b = DateUtil.format("yyyy-MM-dd HH:mm:ss");
		System.out.print(b);
	}
}
